package com.lsa.helpers.graph;

import java.util.Iterator;
import java.util.List;

public interface IGraph<T, U> {
	int nodeCount();
	int edgeCount();
	boolean isDirected();
	
	List<Integer> adjacencyList(int u);

	T nodeAttr(int i);
	U edgeAttr(int u, int v);
	int addNode(T data);
	void addEdge(int from, int to, U data);
	
	boolean hasEdge(int from, int to);
	
	Iterator<T> vertexIterator();
	Iterator<IEdgeNode<U>> edgeIterator();
}